<?php
namespace databaseClass;


interface crudData
{
  public function insert(Type $var = null);

  public function delete(Type $var = null);

  public function update(Type $var = null);

  public function select(Type $var = null);

}

class database 
// implements crudData
{
  protected $mysqli;
  protected $sql;
  protected $collectInfo = [];
  const createdb = 'CREATE DATABASE ';
  const createTable = 'CREATE TABLE ';

  /**
   * 构造函数
   *
   * @param string $servername 服务器名字
   * @param string $username   用户名
   * @param string $password   密码
   * @param string $dbName     数据库名字 
   * @param string $port       端口
   * @param string $socket     通信方式
   */
  public function __construct($servername, $username, $password, $dbName='', $port = '', $socket = "")
  {
    if ($port === "") {
      $port = ini_get('mysqli.default_port');
    }
    if ($socket === "") {
      $socket = ini_get('mysqli.default_socket');
    }

    $this->mysqli = new \mysqli($servername, $username, $password, $dbName, $port, $socket);

    if ($this->mysqli->connect_error) {
      die("连接失败: " . $this->mysqli->connect_error);
    }
  }

  /**
   * 改变数据库的连接
   *
   * @param string $servername 服务器名字
   * @param string $username   用户名
   * @param string $password   密码
   * @param string $dbName     数据库名字 
   * @param string $port       端口
   * @param string $socket     通信方式
   */
  public function changeConnection($servername, $username, $password, $dbName='', $port = '', $socket = "")
  {
    if ($port === "") {
      $port = ini_get('mysqli.default_port');
    }
    if ($socket === "") {
      $socket = ini_get('mysqli.default_socket');
    }

    $this->mysqli = new \mysqli($servername, $username, $password, $dbName, $port, $socket);

    if ($this->mysqli->connect_error) {
      die("连接失败: " . $this->mysqli->connect_error);
    }
  }

  /**
   * 创建数据库
   *
   * @param string $dbName 数据库名
   */
  public function createdb($dbName)
  {
    $this->sql = static::createdb .$dbName;
    if($this->mysqli->query($this->sql) === true){
      echo($dbName . "Create success");
    }else{
      echo("fail to create $dbName " . $conn->error);
    }
  }

  /**
   * 创建表
   *
   * @param string $tablename 表的名字
   * @param array $tableHead 表头
   */
  public function createTable( string $tableName,array $tableHead)
  {
    $tableHead = implode(",",$tableHead);
    $this->sql = static::createTable . $tableName . "($tableHead)";
    if ($this->mysqli->query($this->sql) === true) {

      echo ("Table $tableName created successfully");
    } else {
      echo ("fail to creat Table $tableName" . PHP_EOL . $this->mysqli->error);
    }
  }

  /**
   * 析构函数，关闭数据库连接
   */
  function __destruct()
  {
    $this->mysqli->close();
  }

  
  //构造函数,连接数据库 私有 单例模式 final


  // 调用构造函数 static 单例模式


  //析构函数 关闭数据库连接


  // 插入数据,要考虑到多条或大量数据的插入

  // 查询数据 数据排序 按参数进行过滤


  // 更新数据,删除数据


}
$servername = "localhost";
$username = "root";
$password = "";
// $dbName = "myDB";
$test = new database($servername, $username, $password);
// $test->createdb('myDB2');
// 表头数据
$id = 'id INT(6) UNSIGNED AUTO_INCREMENT PRIMARY KEY';
$firstName = 'firstname VARCHAR(30) NOT NULL';
$lastName = 'lastname VARCHAR(30) NOT NULL';
$email = 'email VARCHAR(50)';
$regdate = 'reg_date TIMESTAMP';
$tableHead = array();
array_push($tableHead, $id, $firstName, $lastName, $email, $regdate);
$tableName = 'myGuest';
$test->createTable($tableName,$tableHead);





/** 
 * 将连接的信息放入数组，更改构造函数，去掉改变连接函数，加多一个设置连接信息的函数和进行连接的函数。构造函数就引用
 * 这个两个函数来完成。然后创建表格的函数也要改改，要加上连接选定数据库的函数，不然没法添加表
 * 
 * 增删改查的接口还没有完成。
 * 考虑是否将判定是否成功的if，else独立出来。
 * */
